#ifndef ENEMIES_H
#define ENEMIES_H

#include <string>

//Main enemy class:

class Enemies {
    
public:
       
    Enemies():current(-1) {}
    
    int MouseClick(int x, int y);
    int Draw();
    
    int Reset();
    
    int SetWindowName(const std::string& Name);
    std::string GetWindowName() const {
        return WindowName;
    }
    
private:
    
    std::string WindowName;
    
    int current;
    
};


class Enemy {

public:
    
    virtual int Draw(const char* Name, int id)=0;
    virtual int DrawFrame(const char* Name, int id)=0;
    
    virtual int MouseClick(int id, int x, int y, int again)=0;
    virtual int Move(int id)=0;
    virtual int DrawFrames(int id)=0;
    
};

class Spider: public Enemy {
    
public:
    
    Spider();
    
    int Draw(const char* Name, int id);
    int DrawFrame(const char* Name, int id);
    int MouseClick(int id, int mx, int my, int again);
    int Move(int id);
    int DrawFrames(int id);
    
private:
    
    int mouse_x, mouse_y;
    int marked;
    
    enum {
        normal,
        up,
        down
    };
    int style;    
};

class Bird: public Enemy {
    
public:
    
    Bird();
    
    int Draw(const char* Name, int id);
    int DrawFrame(const char* Name, int id);
    int MouseClick(int id, int mx, int my, int again);
    int Move(int id);
    int DrawFrames(int id);
    
private:
    
    int mouse_x, mouse_y;
    int marked;
    
    enum {
        normal = 0,
        left,
        right,
        up,
        down
    };
    int style;
};

class Ant: public Enemy {
    
public:
    
    Ant();
    
    int Draw(const char* Name, int id);
    int DrawFrame(const char* Name, int id);
    int MouseClick(int id, int mx, int my, int again);
    int Move(int id);
    int DrawFrames(int id);
    
private:
    
    int mouse_x, mouse_y;
    int marked;
    int active;
    
    enum {
        normal = 0,
        left,
        right,
    };
    int style;
};

class Drop: public Enemy {
    
public:
    
    Drop();
    
    int Draw(const char* Name, int id);
    int DrawFrame(const char* Name, int id);
    int MouseClick(int id, int mx, int my, int again);
    int Move(int id);
    int DrawFrames(int id);
    
private:
    
    int mouse_x, mouse_y;
    int marked;
    int active;
    
    enum {
        normal = 0,
        up,
        down,
    };
    int style;
};

class Apple: public Enemy {
    
public:
    
    Apple();
    
    int Draw(const char* Name, int id);
    int DrawFrame(const char* Name, int id);
    int MouseClick(int id, int mx, int my, int again);
    int Move(int id);
    int DrawFrames(int id);
    
private:
    
    int mouse_x, mouse_y;
    int marked;
    int active;
    
};

class Cherry: public Enemy {
    
public:
    
    Cherry();
    
    int Draw(const char* Name, int id);
    int DrawFrame(const char* Name, int id);
    int MouseClick(int id, int mx, int my, int again);
    int Move(int id);
    int DrawFrames(int id);
    
private:
    
    int mouse_x, mouse_y;
    int marked;
    int active;
    
};

class Crystal: public Enemy {
    
public:
    
    Crystal();
    
    int Draw(const char* Name, int id);
    int DrawFrame(const char* Name, int id);
    int MouseClick(int id, int mx, int my, int again);
    int Move(int id);
    int DrawFrames(int id);
    
private:
    
    int mouse_x, mouse_y;
    int marked;
    int active;
    
};

#endif
